#include "eigen.h"

class Qntm_var {

 private:

  int		num;
  Eigenvalue * 	eval;
  Fwave	* 	wave;
  double 	Eo;
  double        leftedge;
  double	offset;

 public:

  double phi;
  double density;
  double * prob;

  Qntm_var * ptr;

  Qntm_var() { num=0;eval=0;wave=0;Eo=0;phi=0;offset=0;leftedge = 0;density=0;prob=0; }
  ~Qntm_var() {	if(eval) delete [] eval; if(wave) delete [] wave; if(prob) delete [] prob;}
  Qntm_var(const Qntm_var &);
  double  ret_phi() {return phi;}
  int 	ret_num() {return num;}
  double  ret_Eo() {return Eo;}
  double  ret_leftedge() {return leftedge;}
  double  ret_offset() {return offset;}
  void  set_offset(double x) { offset=x;}
  Qntm_var operator=(Qntm_var  & op);
  Eigenvalue ret_eval(int);
  Eigenvalue ret_eval(double);
  Fwave ret_wave(int);
  Fwave ret_wave(double);
  double ret_energy(int);
  void show_wave(double E);
  void set_eigen(Eigenvalue * top, double energy, double x_coor,double x_left, double mass);
  int set_wave(double E, Complex Ac, Complex Bc);
  double calc_prob(double E, double lgth);
  void set_prob(double E, double lgth);
  void set_prob_e(double E, double lgth, FILE * fp);
  void set_prob_h(double E, double lgth, FILE * fp);
  int check_norm(double E);
  void propagation(double E, Complex & Ac, Complex & Bc, Qntm_var * old);
  int add_eigenvalue(Eigenvalue, Fwave);
  int add_eigenvalue(double);
  int add_eigenvalue(double,double);
  void modify_wave(Eigenvalue, Fwave wave_inp);
  int drop(double);
  void show();
};


























